package com.vshop.mapper.aspecial;

import com.vshop.entity.alast.common.PartnerPackage;
import com.vshop.entity.alast.common.ServicePlanOrderRecord;
import com.vshop.entity.aspecial.common.PartnerSpecialAccessRecord;
import com.vshop.entity.aspecial.common.PartnerSpecialDeviceLifecycle;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper

/**
 * 特殊客户逻辑处理
 * @author lm
 * @date 2020/8/24 14:34
 */

public interface SpecialLogicMapper {
    /**
     * 查询特殊接口访问：
     * <p>
     * 某个设备的某条订单是否已经入库
     *
     * @param partnerCode
     * @param deviceCode
     * @param requestOrderId
     * @return
     */
    Integer querySpecialAccessRecord(@Param("partnerCode") String partnerCode,
                                     @Param("deviceCode") String deviceCode,
                                     @Param("requestOrderId") String requestOrderId);

    /**
     * 特殊通过接口访问打开链接的记录入库 ：partner_aspecial_access_record_t
     *
     * @param record
     * @return
     */
    Integer insertSpecialAccessRecord(PartnerSpecialAccessRecord record);

    /**
     * 激活卡片时：
     * <p>
     * 模拟支付成功处理数据的方法
     *
     * @param record
     * @return
     */
    Integer insertSpecialPayData(ServicePlanOrderRecord record);

    /**
     * 根据payId查询需要去做订购套餐的订单
     *
     * @param payId
     * @return
     */
    List<ServicePlanOrderRecord> queryOrderRecordList(@Param("payId") String payId);

    /**
     * 根据partnerCode和packageCode查询原始套餐的属性
     *
     * @param partnerCode
     * @param packageCode
     * @return
     */
    List<PartnerPackage> queryType(@Param("partnerCode") String partnerCode,
                                   @Param("packageCode") String packageCode);

    /**
     * 根据渠道编码和设备识别码查询支付订单
     *
     * @param partnerCode
     * @param deviceCode
     * @return
     */
    List<ServicePlanOrderRecord> queryRecordBySpecialDevice(@Param("partnerCode") String partnerCode,
                                                            @Param("deviceCode") String deviceCode);

    /**
     * 根据渠道编码和设备识别码查询特殊设备
     *
     * @param partnerCode
     * @param deviceCode
     * @return
     */
    List<PartnerSpecialDeviceLifecycle> querySpecialDeviceOrder(@Param("partnerCode") String partnerCode,
                                                                @Param("deviceCode") String deviceCode);

    /**
     * 根据企业编码去查询数据库里面需要给企业推送的订单数据
     *
     * @param partnerCode
     * @return
     */
    List<ServicePlanOrderRecord> queryChannelResultPushOrderWithCode(@Param("partnerCode") String partnerCode);

    /**
     * 根据企业编码列表去查询数据库里面需要给企业推送的订单数据
     *
     * @param codeList
     * @return
     */
    List<ServicePlanOrderRecord> queryChannelResultPushOrderWithCodeList(@Param("codeList") List<String> codeList);

    /**
     * 根据企业和设备和第三方自己的订单id去查询回调noticeUrl
     *
     * @param partnerCode
     * @param deviceCode
     * @param requestOrderId
     * @return
     */
    String queryNoticeUrl(@Param("partnerCode") String partnerCode,
                          @Param("deviceCode") String deviceCode,
                          @Param("requestOrderId") String requestOrderId);

    /**
     * 更新推送某条记录的提示状态 : isPartnerNotice 是否做企业同步：1-通知，0-不用，默认“1”
     *
     * @param partnerCode
     * @param deviceCode
     * @param payId
     * @param orderNo
     * @return
     */
    Integer updateNoticeRecord(@Param("partnerCode") String partnerCode,
                               @Param("deviceCode") String deviceCode,
                               @Param("payId") String payId,
                               @Param("orderNo") String orderNo);

    /**
     * 看看数据库里面当前这个卡片是不是已经有成功的记录了 :service_plan_order_record_t
     *
     * @param partnerCode
     * @param deviceCode
     * @param transactionId
     * @param payRst
     * @return
     */
    Integer queryActivateCount(@Param("partnerCode") String partnerCode,
                               @Param("deviceCode") String deviceCode,
                               @Param("transactionId") String transactionId,
                               @Param("payRst") String payRst);
}
